/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package videogest;



import java.io.FileNotFoundException;
import java.io.IOException;
import persistencia.*;



/**
 * Esta clase que hereda de persona, tendra un atributo especifico al cliente que es el saldo de este.
 * @author Jesus FC
 */
public class Cliente extends Persona {
    private float saldo;

    public Cliente(String nombre, String direccion, String telefono, String email, String DNI, CategoriaPersona categoria) throws FileNotFoundException, IOException{
        super(nombre, direccion, telefono, email, Codigo.Cliente, DNI, categoria);
        this.saldo = 0;
    }

    public Cliente(String codigo, String clave, String nombre, String direccion, String telefono, String email, String DNI, CategoriaPersona categoria, float saldo, boolean baja) throws FileNotFoundException, IOException{
        super(codigo, clave, nombre, direccion, telefono, email, DNI, categoria, baja);
        this.saldo = saldo;
    }

    public float getSaldo() {
        return saldo;
    }

    public void setSaldo(float saldo) {
        this.saldo = saldo;
        
    }
    public void aumentaSaldo(float saldoASumar){
        if(saldoASumar>0){
            setSaldo(getSaldo() + saldoASumar);
            System.out.println("Su saldo actual es: "+this.getSaldo());
        }
    }
    public void disminuyeSaldo(float saldoARestar){
        if(saldoARestar>0){
            setSaldo(getSaldo() - saldoARestar);
        }
    }


    /**
     * Este método envia a la base de datos un nuevo cliente. La utilizacion de este metodo se realiza una vez se
     * cree la instanciacion de un nuevo cliente, entonces se llamara a este método.
     */
    @Override
    public void alta() {

        persistenciaCliente.altaCliente(this);
         
    }

    /**
     * Este metodo enviara a la base de datos una modificacion, osea ser, modificara
     * un registro de la base de datos
     */
    @Override
    public void modificar() {

         persistenciaCliente.modificarCliente(this);
        
    }

    @Override
    public String toString(){
        String ret="\n";
        ret += "================================================\n";
        ret += "|              DATOS DEL CLIENTE \n";
        ret += "================================================\n";
        ret += "|-- Codigo: "+super.getCodigo()+"\n";
        ret += "|-- Nombre: "+super.getNombre()+"\n";
        ret += "|-- Direccion: "+super.getDireccion()+"\n";
        ret += "|-- Telefono: "+super.getTelefono()+"\n";
        ret += "|-- Email: "+super.getEmail()+"\n";
        ret += "|-- DNI: "+super.getDNI()+"\n";
        ret += "|-- El saldo del cliente es: "+this.getSaldo()+"\n";
        ret += "================================================\n";
        return ret;
    }

 @Override
    public boolean equals(Object o){
        boolean res=false;
       if(o instanceof Cliente){
           Cliente p=(Cliente)o;
           if(this.getCodigo()== (p.getCodigo())){
               res=true;
           }
       }
       return res;
    }

    @Override
    public int hashCode() {
        return 0;
    }

    /**
     * Este método estático devuelve un cliente, realiza la busqueda en la base de datos con el código del cliente
     * que se le ha pasado y devuelve el cliente en un objeto cliente, si no se ha encontrado
     * devuelve el objeto cliente a null.
     * @param codigo, código del cliente a buscar en BD.
     * @return Cliente. Devuelve el cliente que ha encontrado.
     * @throws IOException
     */
    public static Cliente dameCliente(String codigo) throws IOException {

        return persistenciaCliente.dameCliente(codigo);
    }

    /**
     * Este método estático devuelve un cliente, realiza la busqueda en la base de datos con el código del cliente
     *  y la clave de este, que se le ha pasado y devuelve el cliente en un objeto cliente, si no se ha encontrado
     * devuelve el objeto cliente a null.
     * @param codigo, código del cliente a buscar en BD.
     * @param clave , clave del cliente a buscar en BD.
     * @return Cliente. Devuelve el cliente que ha encontrado.
     * @throws IOException
     */
    public static Cliente dameCliente(String codigo,String clave) throws IOException {
        return persistenciaCliente.dameClienteClave(codigo,clave);
    }
}
